import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
@WebServlet("/sessionTest")
public class sessionTest extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //HttpSession session = req.getSession(true);
        //参数为true 不存在就直接创建,存在时就直接查询,登录时使用
        //参数为false 不存在就返回null 存在就直接查询 后续跳转到其他页面,检查用户登陆状态时使用
        //getSession做的工作
        /**
         * 1.先读取请求中的cookie 看cookie中是否有JSESSION属性 也就是sessionid属性,以及值是什么
         *    如果没有,就认为需要创建会话
         *    如果有,通过这个JSESSION来查询当前是否存在这个session
         *      要是session不存在,就认为需要创建新session
         *      要是session存在,就返回该session
         *  2.如果当前需要创建会话,就需要创建出一个Session对象,同时生成一个唯一的JSESSION,
         *    以这个JSESSION为key,Session对象为value 把这个键值对插入到服务器上的哈希表中
         *
         *  3.刚才生成的JSESSION又会通过addCookie方法,加入响应中,此时响应里就会带有Set-Cookie字段,这里的值就是JSESSION=XXXXXXXXXXX
         *    通过响应就把JSESSION返回到浏览器了
         */
        String username = req.getParameter("username");
        String password = req.getParameter("password");
        if(username == null || password == null || username.equals("") || password.equals("")){
            resp.setContentType("text/html; charset=utf8");
            resp.getWriter().write("请求参数不完整");
            return;
        }

        //验证密码正确性
        if(!username.equals("zhangsan")){
            resp.setContentType("text/html; charset=utf8");
            resp.getWriter().write("用户名错误");
            return;
        }
        if(!password.equals("123")){
            resp.setContentType("text/html; charset=utf8");
            resp.getWriter().write("密码错误");
            return;
        }

        //登陆成功 给这个用户创建会话
        HttpSession session = req.getSession(true);
        session.setAttribute("username",username);
        session.setAttribute("time",System.currentTimeMillis());
        resp.sendRedirect("index.html");
    }
}
